
static char RCSId[]="$Id: TicCell.m,v 1.1.1.1 1993/03/18 03:36:23 davis Exp $";


#import <appkit/Font.h>
#import <appkit/Text.h>		/* NXTextFontInfo()		*/
#import <dpsclient/wraps.h>
#import <strings.h>

#import "TicCell.h"
#import "TicObject.h"

#define VALUE_COLUMN_END 95.0
#define STRING_COLUMN_START 100.0
#define DIGITS_ACCURACY 5


@implementation TicCell

- drawInside:(const NXRect *)cellFrame inView:controlView
{
    float	stringWidth;
    NXRect	rectArray[2];
    char	valueString[100];

    sprintf (valueString, "%.*f", DIGITS_ACCURACY, [subObject doubleValue]);
   
    /*  
     *  Find width of the string, which depends on the font, which 
     *  depends on whether we're printing or drawing.
     */

    if (NXDrawingStatus == NX_DRAWING)
	stringWidth = [[[support screenFont] set] getWidthOf:valueString];
    else
	stringWidth = [[support set] getWidthOf:valueString];

    
    PSsetgray(cFlags1.highlighted ? NX_WHITE : NX_LTGRAY);     /* Erase cell */
    NXRectFill(cellFrame);


    PSsetgray(cFlags1.disabled? NX_DKGRAY : NX_BLACK);

    /*  
     *  TicCells draw both the double value and the string value in 
     *  the cell.  Here's the string value ("contents"):
     */

    PSmoveto(NX_X(cellFrame) + STRING_COLUMN_START,
    	     NX_Y(cellFrame) + lineHeight - descender);
    PSshow(contents);
    
    /*  ... and the double value:  */

    PSmoveto(NX_X(cellFrame) + VALUE_COLUMN_END - stringWidth,
	     NX_Y(cellFrame) + lineHeight - descender);
    PSshow(valueString);
    

    /*  Draw the two dark gray lines above and below the cell.  */

    PSsetgray(NX_DKGRAY);
    if (cFlags1.highlighted) {
	/*
	 *  Draw 1-pixel tall rectangles instead of lines (this is 
	 *  faster than PSmoveto(); PSlineto()).
	 */
	NXSetRect(&(rectArray[0]), NX_X(cellFrame), NX_Y(cellFrame),
		  NX_WIDTH(cellFrame), 1.0);
	NXSetRect(&(rectArray[1]), NX_X(cellFrame), NX_MAXY(cellFrame) - 1.0,
		  NX_WIDTH(cellFrame), 1.0);

	/* 
	 * Using NXRectFillList is faster than separate calls to 
	 * NXRectFill.
	 */
	NXRectFillList(rectArray, 2);
    }

    return self;
}


// Shuts up the compiler about unused RCSId
- (const char *) rcsid
{
    return RCSId;
}


@end
